package polymorphism;

/**
 * 1、理解多态性：可以理解为一个事物的多种形态
 *2、何为多态性：
 *      对象的多态性：父类的引用指向子类的对象（或子类的对象赋给父类的引用）
 *
 *3、多态的使用：虚拟方法调用
 *              有了对象的多态性以后，我们在编译期，只能调用父类中声明的方法，但在运行期，我们实际执行的是子类重写父类的方法。
 *              总结：编译看左边，运行看右边
 *
 *4、多态性的使用前提：①类的继承关系    ②方法的重写
 *
 * 5、对象的多态性，只适用于方法，不适用于属性
 */

public class PersonTest {
    public static void main(String[] args) {
        Person p = new Person();
        p.eat();
        p.walk();

        Man m = new Man();
        m.earnMoney();
        m.age = 21;

        System.out.println("===============");

        //对象的多态性：父类的引用指向子类的对象（或子类的对象赋给父类的引用）
        Person e = new Man();
        //多态的使用 ：当调用子父类同名同参数的方法时，实际执行的是子类重写父类的方法---虚拟方法调用
        e.eat();
        e.walk();
        //e.earnMoney();//不能调用父类没有而子类独有的方法
        System.out.println(e.id);//1001;这里是用的父类的id值，对象的多态性不适用于属性

        Person r = new Woman();
        r.eat();
        r.walk();
    }
}
